<?php

require_once 'classes/Personne.php';
require_once 'SCinterface.php';
require_once 'classes/Message.php';

/*
 * Classe de service CRUD pour manipuler les enregistrements de Personnes
 */
class SCpersonne implements SCinterface{
    
    private $db;

    /**
     *Contructeur créant l'objet pour la connexion à la DB 
     */
    public function __construct() {
        $this->db = new PDO(ACA_DB_DSN, ACA_DB_USER, ACA_DB_PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
        $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }

    /**
    * Ajoute une personne
    * @param Personne Personne à ajouter
    */
   public function ajouter($unePersonneAAjouter) {
       
       $unePersonneAMemoriser = null;
       try{
           
           $query =  $this->db->prepare("INSERT INTO personne " .
                   "(titre, prenom, nom, telephone, telephonesecond, email, attestationFiscale, inscriptionOnline, remarque) VALUES(" .
                   ":titre, :prenom, :nom, :telephone, :telephonesecond, :email, :attestationFiscale, :inscriptionOnline, :remarque)");

           $query->execute(array(
                   'titre'              => $unePersonneAAjouter->getTitre(),
                   'prenom'             => $unePersonneAAjouter->getPrenom(),
                   'nom'                => $unePersonneAAjouter->getNom(),
                   'telephone'          => $unePersonneAAjouter->getTelephone(),
                   'telephonesecond'    => $unePersonneAAjouter->getTelephonesecond(),
                   'email'              => $unePersonneAAjouter->getEmail(),
                   'attestationFiscale' => $unePersonneAAjouter->getAttestationFiscale(),
                   'inscriptionOnline'  => $unePersonneAAjouter->getInscriptionOnline(),
                   'remarque'           => $unePersonneAAjouter->getRemarque()
               ));

           $unePersonneAMemoriser = $unePersonneAAjouter;
           $unePersonneAMemoriser->setId($this->db->lastInsertId());

               $query->closeCursor();
       }
       catch(PDOException $e)
        {
            return new Message("Personne non ajoutée:".$e->getMessage());
        }
               return $unePersonneAMemoriser;
   }
    /**
     * Methode permettant de modifier une personne
     * @param Personne personne à modifier
     * @return boolean 
     */
    public function modifier($unePersonneAModifier){
        $unePersonneModifiee = null;
        try{
               $query =  $this->db->prepare("UPDATE personne SET ". 
                       "titre=:titre, prenom=:prenom, nom=:nom, telephone=:telephone, telephonesecond=:telephonesecond, email=:email, 
                           attestationFiscale=:attestationFiscale, inscriptionOnline=:inscriptionOnline, remarque=:remarque
                           WHERE id= :id;");

               $query->execute(array(
                       'id'                 => $unePersonneAModifier->getId(),
                       'titre'              => $unePersonneAModifier->getTitre(),
                       'prenom'             => $unePersonneAModifier->getPrenom(),
                       'nom'                => $unePersonneAModifier->getNom(),
                       'telephone'          => $unePersonneAModifier->getTelephone(),
                       'telephonesecond'    => $unePersonneAModifier->getTelephonesecond(),
                       'email'              => $unePersonneAModifier->getEmail(),
                       'attestationFiscale' => $unePersonneAModifier->getAttestationFiscale(),
                       'inscriptionOnline'  => $unePersonneAModifier->getInscriptionOnline(),
                       'remarque'           => $unePersonneAModifier->getRemarque()
                   ));
               $unePersonneModifiee = $unePersonneAModifier;
               $query->closeCursor();
           }
                catch(PDOException $e){
                print($e->getMessage());
                return new Message("Personne non modifiée:".$e->getMessage());
           }
                return $unePersonneModifiee;
    }
    /**
     * Methode permettant de supprimer une personne
     * @param Personne Personne à supprimer
     * @return boolean 
     */
    public function supprimer($unePersonneASupprimer){
        try{
        $query = "DELETE FROM personne WHERE id='".$unePersonneASupprimer->getId()."';";
                   
                $this->db->query($query);
                $message = new Message("Personne supprimée");
                
                }
                catch(PDOException $e)
        {
            $message = new Message("Personne non supprimée:".$e->getMessage());
        }
               return $message;
    }
   
    /**
     *
     * @param Personne personneALister de recherche sous forme d'objet Personne
     * @return un tableau d'objet Personne
     */
    public function lister($personneALister){
        try{
         

            $sql="SELECT * FROM personne ";
            $sql_Where="WHERE";
            if($personneALister!=NULL)
            {
                if($personneALister->getId()!=NULL)
                    $sql_Where.=" id = ".$personneALister->getId()." AND ";
                if($personneALister->getTitre()!=NULL)
                    $sql_Where.=" titre = '".$personneALister->getTitre()."' AND ";
                if($personneALister->getPrenom()!=NULL)
                    $sql_Where.=" prenom LIKE '%".$personneALister->getPrenom()."%' AND ";
                if($personneALister->getNom()!=NULL)
                    $sql_Where.=" nom LIKE '%".$personneALister->getNom()."%' AND ";
                if($personneALister->getEmail()!=NULL)
                    $sql_Where.=" email LIKE '%".$personneALister->getEmail()."%' AND ";
            }         
                
            $sql_Where = substr($sql_Where,0,-5); 
            $sql.=$sql_Where." ORDER BY id DESC;";
            $lesPersonnesTrouvees=NULL;
            $unePersonneLue=NULL;
            $result=$this->db->query($sql);
            while($row = $result->fetch(PDO::FETCH_ASSOC))
            {   
                $unePersonneLue = new Personne($row['id'],$row['titre'],$row['prenom'],$row['nom'],$row['telephone'],$row['telephonesecond'], 
                        $row['email'],$row['attestationFiscale'],$row['inscriptionOnline'],$row['remarque']);
               
                    $lesPersonnesTrouvees[]=$unePersonneLue;
            }        
        }
        catch(PDOException $e)
        {
            print($e->getMessage());
            $lesPersonnesTrouvees=NULL;
        }
        return $lesPersonnesTrouvees;
    }

  
}

?>
